#include<iostream>
#include<cstdlib>
#include<unistd.h>
#include<signal.h>
#include<cstring>
#include<cerrno>


// void handler(int signum)
// {
//     printf("收到了%d 号信号\n",signum);
// }

int main()
{
    //signal(17,handler);
    signal(17,SIG_IGN);
    pid_t id=fork();
   
    if(id==0) //子进程
    {
        int time=5;
        while(time--)sleep(1);
        exit(1);
    }
    //父进程
    sigset_t pending;
    sigset_t block;

    while(1)//; //什么也不做，就等着子进程退出
    {
        sigemptyset(&pending);
        sigemptyset(&block);
        sigpending(&pending);
        sigprocmask(0,nullptr,&block);
        printf("block 信号集：");
        for(int i=32;i>0;--i)
        {
            printf("%d",sigismember(&block,i));
        }

        printf("\n");

        printf("pending 信号集：");
        for(int i=32;i>0;--i)
        {
            printf("%d",sigismember(&pending,i));
        }

        printf("\n");
        sleep(1);
    }
    return 0;
}






// void handler3(int signum)
// {
//     int time=5;
//     while(time--)
//     {
//         printf("正在捕捉%d号信号\n",signum);
//         sleep(1);
//     }
// }

// void handler(int signum)
// {
//     std::cout<<"收到了"<<signum<<"号信号, 倒计时十秒"<<std::endl;
//     int time =5;
//     sigset_t block;
//     sigset_t pending;
//     while(time--)
//     {
//         sigemptyset(&pending);
//         sigprocmask(0,nullptr,&block);
//         sigpending(&pending);
//         printf("信号屏蔽字：");
//         for(int i=32;i>=1;--i)
//         {
//             printf("%d",sigismember(&block,i));
//         }
//         printf("\n pending 信号集：");
//         for(int i=32;i>0;--i)
//         {
//             printf("%d",sigismember(&pending,i));
//         }

//         printf("\n");
//         //printf("%2d\r",time--);
//         //fflush(stdout);
//         sleep(1);
//     }
//     std::cout<< std::endl;
//     std::cout<<signum<<"号信号捕捉完毕"<<std::endl;
// }


// int main()
// {
//     signal(2,handler);
//     signal(3,handler3);
//     // struct sigaction act;
//     // sigset_t block;
//     // sigemptyset(&block);
//     // sigaddset(&block,3);
//     // //act.sa_flags=0;
//     // act.sa_mask=block;
//     // act.sa_handler =handler;
//     // //act.sa_restorer=nullptr;
//     // //act.sa_sigaction=nullptr;
//     // int ret=sigaction(2,&act,nullptr);
//     // if(ret==-1)
//     // {
//     //     printf("strerror(roobo)");
//     // }
//      while(1);
    

//     return 0;
// }














// 
//int main()
//{
//    int* p=nullptr;
//    *p=10;
//
//    return 0;
//}



//int cnt=0;
//
//void handler(int signum)
//{
//    std::cout<<cnt<<std::endl;
//    exit(1);
//}
//
//int main()
//{
//    signal(SIGALRM,handler);
//    alarm(1);
//    while(1)
//    {
//        //std::cout<<cnt++<<std::endl;
//        ++cnt;
//    }
//    
//
//    return 0;
//}
//


// 
//void handler(int signum)
//{
//    std::cout<<"我的pid是:"<<getpid()<<"--->我收到了"<<signum<<"号信号"<<std::endl;
//}
//
//int main()
//{
//    signal(2,handler);  // signal(SIGINT,handler) 也是一样的
//    signal(3,handler);  // signal(SIGQUIT,handler) 也是一样的
//
//    signal(8,handler);  // signal(SIGQUIT,handler) 也是一样的
//    int a=10;
//    int b=0;
//    int c=a/b;
//
//    while(1)
//    {
//        std::cout<<"~~~~~~"<<std::endl;
//        sleep(1);
//    }
//
//    return 0;
//}
//

